var imtypelist = {
	1 : 'QQ'
//	,
//	2 : 'MSN',
//	3 : 'UC',
//	4 : '飞信',
//	5 : '阿里旺旺',
//	6 : '网易POPO',
//	7 : '雅虎通'
};
var typelist = {
	1 : '上线',
	2 : '下线',
	3 : '私聊',
	4 : '临时私聊',
	5 : '群聊',
	6 : '临时群聊',
	7 : '好友列表',
	8 : '分组信息',
	9 : '群列表',
	10 : '群昵称',
	11 : 'MAC和外网地址',
	12 : '账户信息',
	13 : '好友备注',
	14 : '客户端发送短消息',
	15 : '本地消息密钥',
	16 : '分组归属'
};
Ext.onReady(function() {
	var grid;
	var store ;
	var hoursList = generateList(24);
	var minutesList = generateList(60);
	var secondList = minutesList;
	var detailWindow;
	var pTypeGroupData = [];
	for ( var item in imtypelist) {
		var temp = {
			boxLabel : imtypelist[item],
			value : item
		};
		pTypeGroupData.push(temp);
	}
	var actionTypeGroupData = [];
	for ( var item in typelist) {
		var typeItem = {
			boxLabel : typelist[item],
			value : item
		};
		actionTypeGroupData.push(typeItem);
	}
	var pTypeCheckboxGroup = new Ext.form.CheckboxGroup({
		id : 'pType',
		xtype : 'checkboxgroup',
		itemCls : 'x-check-group-alt',
		columns : [ 0.15, 0.15, 0.15, 0.15 ],
		defaults : {
			checked : true
		},
		items : pTypeGroupData
	});
	var actionTypeCheckboxGroup = new Ext.form.CheckboxGroup({
		id : 'actionType',
		xtype : 'checkboxgroup',
		itemCls : 'x-check-group-alt',
		columns : [ 0.15, 0.15, 0.15, 0.15 ],
		defaults : {
			checked : true
		},
		items : actionTypeGroupData
	});
	var dt = new Date();
	var form1 = new Ext.form.FormPanel({
		id : 'form1',
		frame : true,
		region: 'center',
		autoScroll : true,
		minHeight : 200,
//		collapsible : true,
//		titleCollapse :true,
		title : "查询条件",
		bodyStyle : "padding:5px 5px 0",
		items : [
				{
					fieldLabel : "开始时间",
					layout : 'column',
					width : 300,
					items : [ {
						xtype : "datefield",
						name : "startTime",
						format : 'Y-m-d',
						altFormats : 'Y-m-d',
						columnWidth : .4,
						editable:false,
						value : dt
					}, getDateCombo('startTime_hour', hoursList),
							getDateCombo('startTime_minute', minutesList),
							getDateCombo('startTime_second', secondList) ]
				},
				{
					fieldLabel : "结束时间",
					layout : 'column',
					width : 300,
					items : [
							{	editable:false,
								xtype : "datefield",
								name : "endTime",
								altFormats : 'Y-m-d',
								format : 'Y-m-d',
								columnWidth : .4,
								value : dt
							},
							getDateCombo('endTime_hour', hoursList, dt
									.getHours()),
							getDateCombo('endTime_minute', minutesList,59),
							getDateCombo('endTime_second', secondList,59) ]
				},
				{
					boxLabel : '全选 ',
					name : 'pAllselct',
					id : 'pAllselct',
					checked : true,
					xtype : "checkbox",
					fieldLabel : '协议类型',
					listeners : {
						check : function(i, selected) {
							Ext.each(pTypeCheckboxGroup.items.items, function(
									item, i) {
								item.setValue(selected);
							});
						}
					}
				},
				pTypeCheckboxGroup,
				{
					boxLabel : '全选 ',
					id : 'aAllselct',
					name : 'aAllselct',
					checked : true,
					xtype : "checkbox",
					listeners : {
						check : function(i, selected) {
							Ext.each(actionTypeCheckboxGroup.items.items,
									function(item, i) {
										item.setValue(selected);
									});
						}
					},
					fieldLabel : '动作类型'
				}, actionTypeCheckboxGroup,

				{
					fieldLabel : "聊天账号",
					xtype : "textfield",
					name : "loginname",
					id : "loginname",
					width : 200
				}, {
					fieldLabel : "关键字",
					xtype : "textfield",
					name : "keyword",
					id : "keyword",
					width : 200
				}, {
					fieldLabel : "IP地址",
					xtype : "textfield",
					name : "ip",
					id : "ip",
					width : 200,
					emptyText:'格式如：192.168.1.1'
				}

		],
		buttonAlign : 'center',
		buttons : [ {
			text : "开始查询",
			handler : function(btn, obj) {
				var values = form1.getForm().getFieldValues();
				var ptype = pTypeCheckboxGroup.getValue();
				if (ptype.length == 0) {
					Ext.Msg.alert('警告', '协议类型不能为空');
					return;
				}
				var ptypeParams = new Array();
				for ( var i = 0; i < ptype.length; i++) {
					if (ptype[i].value)
						ptypeParams.push(ptype[i].value);
				}

				values.pType = ptypeParams.toString();
				var actionType = actionTypeCheckboxGroup.getValue();
				if (actionType.length == 0) {
					Ext.Msg.alert('警告', '动作类型不能为空');
					return;
				}
				var actionTypeParams = new Array();
				for ( var i = 0; i < actionType.length; i++) {
					if (actionType[i].value)
						actionTypeParams.push(actionType[i].value);
				}
				values.actionType = actionTypeParams.toString();

				values.startTime = values.startTime.format('Y/m/d');
				values.endTime = values.endTime.format('Y/m/d');
				
				values.loginname = values.loginname.trim();
				values.keyword = values.keyword.trim();
				values.ip = values.ip.trim();
				if(!Ext.isEmpty(values.ip)){
					var IPAddressMask= /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
					if(!IPAddressMask.test(values.ip)){
						Ext.Msg.alert('警告', 'IP地址格式不正确');
						return;
					}
				}
				
				// 此处 加入遮罩
				grid.loadMask.onBeforeLoad();
				
				Ext.Ajax.request({
					 url:'query',
					 params:values,
					 success: function(resp,opts) { 
					 	var respText = Ext.util.JSON.decode(resp.responseText);  
					 	store.proxy= new Ext.data.PagingMemoryProxy(respText);
					 	store.load({
					 		params:{
					 			start:0,
					 			limit:20
					 		}
					 	});
					 }
				});
			}
		}
		]
	});

	store = new Ext.data.JsonStore({
		root : 'result',
		totalProperty : 'totalItems',
		remoteSort : true,
		fields : [ 'upareaid', 'datasource', 'siteid', 'imtype', 'capturetime',
				'version', 'clientip', 'serverip', 'clientport', 'serverport',
				'srcradius', 'destradius', 'srcmac', 'loginname', 'type',
				'srcid', 'destid', 'content' ]
	});
	
	grid = new Ext.grid.GridPanel({
		id : 'grid',
		split:true,
		region: 'south',
		title : '查询结果',
		store : store,
		height:400,
//		trackMouseOver : false,
		loadMask : true,
		columns : [ {
			id : 'capturetime',
			header : "捕获时间",
			dataIndex : 'capturetime',
			width : 150,
			sortable:true
		}, {
			id : 'imtype',
			header : "IM类型",
			dataIndex : 'imtype',
			width : 50,
			sortable : true,
			renderer : function(i, j, k) {
				return imtypelist[i];
			}
		}, {
			id : 'loginname',
			header : "登陆账号",
			sortable : true,
			dataIndex : 'loginname',
			width : 80
		}, {
			id : 'srcid',
			header : "发送账号",
			dataIndex : 'srcid',
			sortable : true,
			width : 80
		}, {
			id : 'destid',
			header : "接收账号",
			dataIndex : 'destid',
			sortable : true,
			width : 80
		}, {
			id : 'clientip',
			header : "客户端IP",
			dataIndex : 'clientip',
			sortable : true,
			width : 100
		}, {
			id : 'serverip',
			header : "服务器端IP",
			dataIndex : 'serverip',
			sortable : true,
			width : 100
		}, {
			id : 'actiontype',
			header : "动作类型",
			dataIndex : 'type',
			sortable : true,
			width : 80,
			sortable : true,
			renderer : function(i, j, k) {
				return typelist[i];
			}
		}, {
			id : 'content',
			header : "内容",
			width : 500,
			sortable : true,
			dataIndex : 'content',
			renderer : contentRenderer,
			fixed : true
		} ],
		viewConfig : {
			forceFit : true
		},

		bbar : new Ext.PagingToolbar({
			pageSize : 20,
			store : store,
			displayInfo : true,
			displayMsg : '显示记录 {0} - {1} of {2}',
			emptyMsg : "没有记录显示"
		})
	});
//	grid.on('render', function(i, j) {
//		if(Ext.isIE){
//			grid.setHeight(window.parent.tabHeight - 417);
//		}else{
//			grid.setHeight(window.parent.tabHeight - 395);
//		}
//	});

	function dateFormat(strDate) {
		var i = 0;
		var year = strDate.substr(i, 4);
		i += 4;
		var mon = strDate.substr(i, 2);
		i += 2;
		var dd = strDate.substr(i, 2);
		i += 2;
		var hh = strDate.substr(i, 2);
		i += 2;
		var mm = strDate.substr(i, 2);
		i += 2;
		var ss = strDate.substr(i, 2);
		return year + "-" + mon + "-" + dd + " " + hh + ":" + mm + ":" + ss;
	}

	grid.on('rowdblclick', function(i, j) {
		var selectedItem = grid.getStore().getAt(j);
		var content = selectedItem.data.content;
		var decoded = content;
		if (selectedItem.data.type != 15) {
			decoded = Ext.util.JSON.decode(content);
		}
		
		var listView;
		var itemStore;
		if (selectedItem.data.type == 3 || selectedItem.data.type == 4
				|| selectedItem.data.type == 5 || selectedItem.data.type == 6) {
			var sendReceveText ;
			if(decoded.action=="send"){
				sendReceveText="发送";
			}else{
				sendReceveText="接收";
			}
			listView = new Ext.FormPanel({
				labelAlign:'right',
				baseCls:'x-plain',
				border:false,
				items:{
					width:660,
					height:200,
					border:false,
					fieldLabel : '聊天内容',
					xtype:'panel',
					autoScroll:true,
					html : '<b>'+sendReceveText+'时间:</b> ' + dateFormat(decoded.talk_time) + '<br/>'
							+ decoded.text.replace(/\r/g,'<br/>')
				}
			});
		} else if (selectedItem.data.type == 7) {
			itemStore = new Ext.data.JsonStore({
				idProperty : '0',
				data : decoded,
				fields : [ 'id', 'nick_name' ]
			});
			listView = new Ext.grid.GridPanel({
				store : itemStore,
				autoScroll : true,
				title : '好友列表',
				height : 300,
				columns : [ {
					header : '账号',
					dataIndex : 'id'
				}, {
					header : '昵称',
					dataIndex : 'nick_name'
				} ]
			});
		} else if (selectedItem.data.type == 8) {
			itemStore = new Ext.data.JsonStore({
				idProperty : '0',
				data : decoded,
				fields : [ 'group_seq', 'floder_name' ]
			});
			listView = new Ext.grid.GridPanel({
				store : itemStore,
				autoScroll : true,
				title : '分组信息',
				height : 300,
				columns : [ {
					header : '组序',
					dataIndex : 'group_seq'
				}, {
					header : '分组名',
					dataIndex : 'floder_name'
				} ]
			});
		} else if (selectedItem.data.type == 9) {
			itemStore = new Ext.data.JsonStore({
				idProperty : 'id',
				data : decoded.list,
				fields : [ 'id' ]
			});
			listView = new Ext.grid.GridPanel({
				store : itemStore,
				height : 300,
				overflow : 'auto',
				title : decoded.group_name + "(" + decoded.group_code + ")",
				columns : [ {
					header : '账号',
					dataIndex : 'id'
				} ]
			});
		} else if (selectedItem.data.type == 10) {
			itemStore = new Ext.data.JsonStore({
				idProperty : 'id',
				data : decoded.list,
				fields : [ 'id', 'memo' ]
			});
			listView = new Ext.grid.GridPanel({
				store : itemStore,
				height : 300,
				overflow : 'auto',
				title : decoded.group_id,
				columns : [ {
					header : '账号',
					dataIndex : 'id'
				}, {
					header : '昵称',
					dataIndex : 'memo'
				} ]
			});
		} else if (selectedItem.data.type == 11) {
			var str = "<b>客户端IP:</b> " + decoded.client_internet_ip;
			str += "<br/>";
			str += "<b>MAC地址:</b> "+ decoded.real_mac_address;
			
			listView = new Ext.FormPanel({
				labelAlign:'right',
				baseCls:'x-plain',
				border:false,
				items:{
					readOnly :true,
					width:660,
					height:200,
					fieldLabel : typelist[selectedItem.data.type],
					xtype:'panel',
					html : str
				}
			});
		} else if (selectedItem.data.type == 12) {
			var str = "<b>昵称:</b> " + decoded.nick_name;
			str += "<br/>";
			str += "<b/>EMAIL地址:</b> " + decoded.email;
			listView = new Ext.FormPanel({
				labelAlign:'right',
				baseCls:'x-plain',
				border:false,
				items:{
					readOnly :true,
					width:660,
					height:200,
					fieldLabel : typelist[selectedItem.data.type],
					xtype:'panel',
					html : str
				}
			});
		} else if (selectedItem.data.type == 13) {
			itemStore = new Ext.data.JsonStore({
				idProperty : 'id',
				data : decoded,
				fields : [ 'id', 'realname' ]
			});
			listView = new Ext.grid.GridPanel({
				store : itemStore,
				height : 300,
				overflow : 'auto',
				title : typelist[selectedItem.data.type],
				columns : [ {
					header : '账号',
					dataIndex : 'id'
				}, {
					header : '备注',
					dataIndex : 'realname'
				} ]
			});
		} else if (selectedItem.data.type == 14) {
			var str = "<b>收件人:</b> " ;
			var tmp ='';
			for(var i=0;i<decoded.to.length;i++){
				tmp+=decoded.to[i].id;
				if(i!=(decoded.to.length-1)){
					tmp+=',';
				}
			}
			str += tmp;
			str += "<br/>";
			str += "<b>消息:</b> ";
			str += decoded.message;
			
			listView = new Ext.FormPanel({
				labelAlign:'right',
				baseCls:'x-plain',
				border:false,
				items:{
					readOnly :true,
					width:660,
					height:200,
					fieldLabel : '消息体',
					xtype:'panel',
					html : str
				}
			});
		} else if (selectedItem.data.type == 15) {
			listView = new Ext.FormPanel({
				labelAlign:'right',
				baseCls:'x-plain',
				border:false,
				items:{
					readOnly :true,
					width:660,
					height:200,
					fieldLabel : typelist[selectedItem.data.type],
					xtype:'panel',
					html : decoded
				}
			});
		} else if (selectedItem.data.type == 16) {
			itemStore = new Ext.data.JsonStore({
				idProperty : 'id',
				data : decoded,
				fields : [ 'id', 'type', 'flag' ]
			});
			listView = new Ext.grid.GridPanel({
				store : itemStore,
				height : 300,
				title : typelist[selectedItem.data.type],
				columns : [ {
					header : '账号',
					dataIndex : 'id'
				}, {
					header : '类型',
					dataIndex : 'type'
				}, {
					header : 'FLAG',
					dataIndex : 'flag'
				} ]
			});
		} else {
			listView = new Ext.Panel({
				hidden : true
			});
		}

		var items = new Ext.form.FormPanel({
			baseCls:'x-plain',
			border:false,
			frame:true,
			layout:'column',
			labelAlign:'right',
			items : [ 
			{	
				baseCls:'x-plain',
				border:false,
				columnWidth:.5,	
				defaults:{
					xtype:'textfield',
					readOnly :true,
					anchor :'95%'
				},
				layout:'form',
				items:[
					{
						fieldLabel : '捕获时间',
						value : selectedItem.data.capturetime
					}, {
						fieldLabel : 'IM类型',
						value : imtypelist[selectedItem.data.imtype]
					} , {
						fieldLabel : '发送账号',
						value : selectedItem.data.srcid
					} , {
						fieldLabel : '客户端IP',
						value : selectedItem.data.clientip
					} , {
						fieldLabel : '客户端端口',
						value : selectedItem.data.clientport
					} , {
						fieldLabel : '源radius',
						value : selectedItem.data.srcradius
					} , {
					 	fieldLabel : '动作类型',
					 	value : typelist[selectedItem.data.type]
					}
				]
			} ,{
				baseCls:'x-plain',
				border:false,
				columnWidth:.5,
				defaults:{
					xtype:'textfield',
					readOnly :true,
					anchor :'95%'
				},
				layout:'form',
				items:[
					{
						fieldLabel : '登陆账号',
						value : selectedItem.data.loginname
					}, {
						fieldLabel : '版本号',
						value : selectedItem.data.version
					} , {
						fieldLabel : '接收账号',
						value : selectedItem.data.destid
					} , {
						fieldLabel : '服务器端IP',
						value : selectedItem.data.serverip
					} , {
						fieldLabel : '服务器端口',
						value : selectedItem.data.serverport
					} , {
						fieldLabel : '宿radius',
						value : selectedItem.data.destradius
					} 
				]
			} ]
		});

		detailWindow = new Ext.Window({
			width : 800,
			title : '详细信息',
			closeAction : 'close',
			modal : true,
			frame:true,
			autoScroll : true,
			items : [items,listView],
			buttonAlign : 'center',
			buttons : [ {
				text : '关闭',
				handler : function() {
					detailWindow.close();
				}
			} ]
		});

		detailWindow.show();
	});

	new Ext.Viewport({
		monitorResize : true,
		layout: 'border',
		items : [ form1, grid ]
	});
});

function contentRenderer(value, cellmeta, record, rowIndex, columnIndex, store) {
	// 上下线 内容为空，不需要decode
	// 本地消息密钥 是字符串，decode会出错，这里特殊处理
	if(record.data.type==1 || record.data.type==2 || record.data.type==15){
		return value;
	}
	var rendererResult='';
	var content = Ext.decode(value);
	switch (record.data.type) {
//		case 1 :   // 上线
//		case 2 :   // 下线
//		case 15 :  // 本地消息密钥
//			break;
		case 3 :   	// 私聊
		case 4 :   	// 临时私聊
		case 5 :   	// 群聊
		case 6 :   	// 临时群聊
			rendererResult=content.text;
			break;
		case 7 :      // 好友列表  
			var friendArray=[];
			Ext.each(content,function(item){
				friendArray.push(item.id+'<'+ item.nick_name +'>  ');
			});
			rendererResult = friendArray.join(',  ');
			break;
		case 8 :     // 分组信息
			var groupArray=[];
			Ext.each(content,function(item){
				groupArray.push(item.group_seq+':'+ item.floder_name);
			});
			rendererResult = groupArray.join(',  ');
			break;
		case 9 :     // 群列表
			var qunArray=[];
			Ext.each(content.list,function(item){
				qunArray.push(item.id);
			});
			rendererResult = content.group_name+"<"+qunArray.join(',  ')+"]";
			break;
		case 10 :    // 群昵称
			var qunArray=[];
			Ext.each(content.list,function(item){
				qunArray.push(item.id+"<"+item.memo+">");
			});
			rendererResult = content.group_id+"["+qunArray.join(',  ')+"]";
			break;
		case 11 :    // Mac和外网地址
			rendererResult = content.client_internet_ip+",  "+content.real_mac_address;
			break;
		case 12 :    // 账户信息
			rendererResult = content.nick_name+",  "+content.email;
			break;
		case 13 :    // 好友备注
			var friendArray=[];
			Ext.each(content,function(item){
				friendArray.push(item.id+'<'+ item.realname +'>');
			});
			rendererResult = friendArray.join(',  ');
			break;
		case 14 :    // 客户端发送短消息
			rendererResult = content.message;
			break;
		case 16 :    // 分组归属
			var groupArray=[];
			Ext.each(content,function(item){
				groupArray.push('<'+item.id+':'+ item.type +':'+item.flag+'>');
			});
			rendererResult = groupArray.join(',  ');
			break;
		default :
			rendererResult=value;
	}

	return rendererResult;
}

function generateList(maxNum) {
	var result = new Array();
	for ( var i = 0; i < maxNum; i++) {
		var displayValue =i ;
		if(i<10){
			displayValue='0'+i;
		}
		var tempArray = [ i, displayValue];
		result.push(tempArray);
	}
	return result;
}

function getDateCombo(name, data, defultValue) {
	defultValue = defultValue ? defultValue : 0;
	return new Ext.form.ComboBox({
		name : name,
		xtype : 'combo',
		columnWidth : .15,
		typeAhead : true,
		triggerAction : 'all',
		lazyRender : true,
		editable:false,
		mode : 'local',
		store : new Ext.data.ArrayStore({
			id : 0,
			fields : [ 'value', 'displayText' ],
			data : data
		}),
		value : defultValue,
		valueField : 'value',
		displayField : 'displayText'
	});
}
